package Client;

import Serveur.I_chat;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.LinkedList;
import java.util.Scanner;

public class ChatClient extends UnicastRemoteObject implements I_ChatClient, Runnable
{
    //Serveur que le client doit utiliser
    private I_chat cs;
    //nom du client
    private String nomClient;
    //Liste des clients connectés
    private LinkedList<I_ChatClient> ldlist;
    
    //Construit un nouveau client en spécifiant à quel serveur il se connecte
    public ChatClient(I_chat serv) throws RemoteException {
        super();
        String nom="";
        boolean rep;
        cs = serv;
        do{
            System.out.println("Entrez votre nom d'utilisateur : ");
            Scanner forname = new Scanner(System.in);
            nom=forname.nextLine();
            rep=cs.UtilisateurValide(nom);
            System.out.println(rep);
            /*for(int j=0;j<ldlist.size();j++){
            System.out.println(ldlist.get(j).getNomClient());}*/
            if(!rep){
                System.out.println("Le nom d'utilisateur existe déjà !");
            
            }
        }while(!rep);
        System.out.println("Bienvenu sur le chat "+ nom);
        nomClient=nom;
        cs.connecter(this);
    }

        @Override
    public synchronized String getNomClient() throws RemoteException {
      return nomClient;
    }
        
        @Override
    public synchronized void recevoir(String message, String auteur, char mode) throws RemoteException {
      switch(mode) {
        case 's':
          System.out.println (auteur + " dit : " + message);
          break;
        case 'e':
          System.out.println (auteur + " est entré dans le chat");
          break;
        case 'l':
          System.out.println (auteur + " a quitté  le chat");
          break;
        case 'h':
          System.out.println (message);
          break;
        }
    }
    
    @Override
    public void run() {
      Scanner in = new Scanner(System.in);
      String msg;
      String rep;

      while(true) {
        try {
          msg = in.nextLine();
          if (msg.equals("exit")) {
            System.out.println ("Vous avez quittez le chat");
            cs.deconnecter(this);
            break;
          }
          else if(msg.equals("show")){
              System.out.println("Les personnes connectées sont : ");
              ldlist=cs.clientsDisponibles();
              for(int j=0;j<ldlist.size();j++){
                  System.out.println(ldlist.get(j).getNomClient());
              }
          }
          if(!(msg.equals("show"))){
              
            System.out.println("Envoyez à une seule personne(1)/Envoyez à tout le monde(Autres)");
            rep=in.nextLine();
            if(rep.equalsIgnoreCase("1")){
                System.out.println("Donnez un destinataire");
                rep=in.nextLine();
                cs.messagePrive(msg, this.getNomClient(), rep, 's');
            }
            else{
                cs.envoyerMessage(msg, this.getNomClient(), 's');
            }
          }
        }  
        catch (Exception e) {
          System.err.println("Erreur de transmission");
        }
      }
    }
}
